#ifndef FILEREPOSITORY_H
#define FILEREPOSITORY_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QList>
#include <QJsonArray>
#include <QJsonObject>
#include "database/database_manager.h"

// 前向声明
struct KmsFile;

class FileRepository
{
public:
    explicit FileRepository(QSqlDatabase &database, const QString &currentUserId = QString());
    
    // 基本CRUD操作
    bool insert(const KmsFile &file);
    bool update(const KmsFile &file);
    bool remove(const QString &fileId);
    KmsFile findById(const QString &fileId);
    QList<KmsFile> findByFolderId(const QString &folderId);
    QList<KmsFile> findByPath(const QString &path);
    QList<KmsFile> findAll();
    KmsFile findByLocalFilePath(const QString &localFilePath);
    
    // 更新操作
    bool updateFromJson(const QJsonObject &fileData);
    bool updateLocalFileInfo(const QString &fileId, qint64 localFileSize, const QString &localFileChecksum, const QString &localFilePath = QString());
    bool clearLocalFileInfo(const QString &fileId);
    bool updateStatus(const QString &fileId, int status);
    
    // 同步操作
    bool syncFromJson(const QJsonArray &filesData);
    
private:
    QSqlDatabase &m_database;
    QString m_currentUserId;
    
    bool isDatabaseConnected() const;
    KmsFile mapFromQuery(const QSqlQuery &query) const;
};

#endif // FILEREPOSITORY_H

